package Test;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class FirstFilter implements Filter {
	public FirstFilter(){
		System.out.println("创建FirstFilter");
	}
	
	public void destroy() {
		System.out.println("销毁FirstFilter");
	}
	//该方法由Tomcat自行调用，因为Tomcat出路Http协议，创建的是HttpServletRequest/HttpServletResponse，
	//所以Tocat在调用此方法时传入的req/res是上述类型

	//FilterChain:过滤链。指的是多个Filter之间的调用关系和顺序，他们像链条一样，从前向后一环一环调用
	public void doFilter(ServletRequest req, ServletResponse res,
			FilterChain chain) throws IOException, ServletException {
		System.out.println("FistFilter前过滤");
		//chain对请求有绝对的处理权
		//他可以允许请求继续执行
		//也可以拒绝请求继续执行
		//当调用chain.doFilter()时，请求居需，否则请求终止。
		//doFilter==继续调用Servlet
		chain.doFilter(req, res);//也就是说没有这句的话，不会调用Servlet，但会出现前后过滤这两句输出
		System.out.println("FistFilter后过滤");	
	}
	//FilterConfig类似于ServletConfug，他可以给当前Fileter预置数据，只需要在web.xml中加以配置即可
	public void init(FilterConfig cfg) throws ServletException {
		System.out.println("初始化FirstFilter");
		System.out.println(cfg.getInitParameter("city"));

	}

}
